uzavreni TCP spojeni

Otázka od: nonsense@volny.cz

31. 8. 2004 13:38

zdravim,

tak jsem si (pro testovaci ucely) vytvoril dvojci programu zvanou
(prekvapive) klient a server s pouzitim knihovny Synapse. Server
dokaze prijmout nekolik ruznych spojeni. Zjistil jsem, ze navazat
spojeni je celkem bezproblemove. V navratove hodonote volani
funkce Accept dostanu handler na nove vzniky socket. Toto je
aktivovano, kdyz klient posle SYN (=nastaveny priznak SYN) paket
volanim funkce Connect. Kdyz (treba) klient ukoncuje spojeni mel
by (asi) poslat FIN (nastaveny priznak FIN) paket. Problem je, ze
ten muj cvicny server nejak nechce poznat, ze klient ukoncil
spojeni volanim funkce CloseSocket. Pomoci Etheral jsem zjisitl,
ze volani funkce CloseSocket "zpusobi" odeslani paketu FIN
klientem. Predpokladam, ze i prijeteti serverem.

Jak lze v synapsi poznat, ze jsem prijal FIN paket ???
Nejak jsem to nedokazal "vykoukat"...
 

diky na postrceni spravnym smerem.

jaroslav nonsense Lukes


--
Hrajte s nami o 1000 Kc kazdy den! Pripojte se pres VOLNY a
tipujte teplotu na vybranem miste v Ceske republice. Uzijte si
leto s VOLNY na strankach http://soutez.volny.cz.


Odpovedá: Lukas Gebauer

31. 8. 2004 14:14

> (nastaveny priznak FIN) paket. Problem je, ze ten muj cvicny server
> nejak nechce poznat, ze klient ukoncil spojeni volanim funkce
> CloseSocket. Pomoci Etheral jsem zjisitl, ze volani funkce
> CloseSocket "zpusobi" odeslani paketu FIN klientem. Predpokladam, ze i
> prijeteti serverem.

To se pozna tak, ze na strane klienta je signalizovano prijeti dat
nulove velikosti. (v pripade nizkourovnove komunikace pomoci
RecvBuffer ti canread signalizuje true, ale waitingdata vraci 0.)

Tato vec je ale zabalena unitr vysokourovnovych ctecich funkci, takze
kdyz zavolas nejaky pozadavek na cteni dat, a mezitim bylo spojeni
ukonceno, je ti vracena chyba v lastEror, nebo zavolana vyjimka
(zalez na tom, jaky rezim pouzivas...).

Na Tuto chybu se obvykle reaguje tim, ze zavolas bud CloseSocket
metodu, nebo rovnou zlikvidujes objekt socketu. V obou pripadch dojde
k dokonceni procesu zavirani socketu.



--
Lukas Gebauer.

E-mail: gebauerl@mlp.cz
http://www.ararat.cz/synapse/ - Ararat Synapse - TCP/IP Lib.


Odpovedá: nonsense@volny.cz

31. 8. 2004 14:39

----- PUVODNI ZPRAVA -----
Od: "Lukas Gebauer" <gebylist@mlp.cz>
Komu: delphi-l@clexpert.cz
Predmet: Re: uzavreni TCP spojeni
Datum: 31.8.2004 - 15:18:07

> > Predpokladam, ze i
> > prijeteti serverem.
>
> To se pozna tak, ze na strane klienta je signalizovano prijeti
> dat
> nulove velikosti. (v pripade nizkourovnove komunikace pomoci
> RecvBuffer ti canread signalizuje true, ale waitingdata vraci
0.) >
> Tato vec je ale zabalena unitr vysokourovnovych ctecich funkci,
> takze
> kdyz zavolas nejaky pozadavek na cteni dat, a mezitim bylo
> spojeni
> ukonceno, je ti vracena chyba v lastEror, nebo zavolana vyjimka
> (zalez na tom, jaky rezim pouzivas...).
>
OK

> Na Tuto chybu se obvykle reaguje tim, ze zavolas bud
CloseSocket > metodu, nebo rovnou zlikvidujes objekt socketu. V
obou pripadch
> dojde
> k dokonceni procesu zavirani socketu.
>
Jasne, to je pak dane druhem pouziti...
Jen jsem (implicitne) predpokladal, ze bude nejak funkce, nebo
promena, ktera bude drzet tuto informaci, nebo ji vracet...


kazdopadne diky za pomoc...

nonsense



--
Hrajte s nami o 1000 Kc kazdy den! Pripojte se pres VOLNY a
tipujte teplotu na vybranem miste v Ceske republice. Uzijte si
leto s VOLNY na strankach http://soutez.volny.cz.


Odpovedá: Lukas Gebauer

31. 8. 2004 15:09

> Jasne, to je pak dane druhem pouziti...
> Jen jsem (implicitne) predpokladal, ze bude nejak funkce, nebo
> promena, ktera bude drzet tuto informaci, nebo ji vracet...

To je z principu dost nesmtyslny pozadavek, protoze tento stav
zjistis stejne az pri pokusu o prijimani dat. Takze proc v tu chvili
nastavovat nejaky priznak, proc pak explicitne nekde ten priznak
testovat, kdyz ti tento stav muze byt rovnou vracen jako vysledek
pokusu o cteni dat?

Ostatne, je to popsano ve FAQ Synapse.  


--
Lukas Gebauer.

E-mail: gebauerl@mlp.cz
http://www.ararat.cz/synapse/ - Ararat Synapse - TCP/IP Lib.